次のテーブル "Products" ("Products") を見てみましょう。
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
列「UnitsOnOrder」はオプションであり、値 NULL を含めることができると仮定します。
次の命令 SELECT を考えてみましょう。
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products
上記の例では、「UnitsOnOrder」値のいずれかが NULL と等しい場合、結果は NULL になります。
MySQL IFNULL() 関数を使用すると、式が NULL と等しい場合に代替値を返すことができます。
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products
または、次のように COALESCE() 関数を使用することもできます。
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products
SQL Server ISNULL() 関数を使用すると、式の値が NULL である場合に代替値を返すことができます。
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products
または、次のように COALESCE() 関数を使用することもできます。
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products
MS Access 関数 IsNull() は、式が null の場合は TRUE (-1) を返し、それ以外の場合は FALSE (0) を返します。
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products
Oracle NVL() 関数でも同じ結果が得られます。
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products
または、次のように COALESCE() 関数を使用することもできます。
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products